Cache coherence is the uniformity of shared resource data that ends up stored in multiple local caches. When different nodes in a multi-node processing architecture maintain caches of a common resource, problems may arise with incoherent data. For example, consider a scenario in which two different nodes (e.g., CPUs) have both cached a copy of a particular data block (e.g., a memory block). If the first node alters its local copy of the data block, and the second node is left with an invalid cache of the data block this results in a lack of coherence. Cache coherence manages conflicts by maintaining coherence of the data in the various multiple caches.
Another example is two nodes attempting to speed up network communication by caching hashes of previously transferred files. When a previously transferred file is modified or deleted, the cache on the destination may be updated by monitoring writes to the file in question. However, updating the cache on the source would require a network communication event, which consumes processing power and network bandwidth. If the network message is not properly received and processed, the different caches would become incoherent.
Common proactive cache coherence management dictates that when a first cache and a second cache become incoherent as a result of changes to the second cache, the changes are actively monitored and remediated by removing the now-invalid data item from the first cache. Such remediation work is wasted if the data item in the first cache is never hit again. Additionally, if the data item is subsequently encountered, it is no longer available in the cache for use. Therefore, proactive cache coherence management may not provide efficient operation in some scenarios.